<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Globaalsed, ehk programmiülesed muutujaväärtused ehk globals</title>
    </head>
    <body>
        <?php
            /*
             * PHP-s eristatakse globaalseid, superglobaalseid ja lokaalseid muutujaid.
             * Et saada aimu, mis need on, toomegi järgmised näited:
             * 
             * Panna tähele, et järgmises programmikoodis on defineeritud kaks muutujat
             * millel on sama nimi, mis mäletatavasti on reeglitevastane.
             * Reeglitevastane on see aga siis, kui need muutujanimed oleks kasutusel
             * ühes ja samas skoobis (käsitlusalas). Globaalne skoob, ehk sisuliselt ka terve
             * programmi ulatus jaguneb omakorda väiksemateks skoopideks, ehk 
             * lokaalseteks skoopideks (funktsiooni bloki sisu). See tähendab laias
             * laastus aga seda, et kui defineerida sama nimega muutuja nii globaalses,
             * kui ka lokaalses skoobis, siis need kaks ei ole üksteisega kuidagi seotud.
             * Vaatamata nende samale nimele võib neil olla täiesti erinev sisu 
             * ning nendega võib manipuleerida täiesti üksteisest sõltumatult.
             */
             
             $mingiPimekaruTekst = "GLOBAALNE: Üks, kaks, kolm, neli, viis: pimekaru tuleb siis!<br/>";
             
             function ytlePimekaruTekst()
             {
                 echo '<br/>1. DEFINEERITUD FUNKTSIOON :<br/>';
                 //Sama nimega muutuja, mis globaalses skoobis:
                 $mingiPimekaruTekst = "LOKAALNE: Üks, kaks, kolm, neli, viis: pimekaru tuleb siis!";
                 echo 'Lokaalse (funktsioonisisese skoobi) muutuja $mingiPimekaruTekst sisu: "' .
                         $mingiPimekaruTekst . '"';
                 echo '<br/>';
             }
             
             echo $mingiPimekaruTekst;
             echo ytlePimekaruTekst();
             
             
             /*
              * Võib juhtuda aga, et meil tekib vajadus funktsiooni sees (millel 
              * lokaalne skoop) pääseda ligi või manipuleerida globaalse skoobi
              * muutujaga. Selle jaoks on kaks võimalust. Üheks võimaluseks on 
              * funktsiooni sisu defineerimise alguses "global" võtmesõna abil 
              * ära defineerida muutujad, mida edaspidi globaalsest skoobist 
              * kasutada püütakse. See piirab aga otsekoheselt funktsiooni sees
              * samanimeliste muutujate kasutamise!
              */
             
             function ytlePimekaruTekstTeistmoodi()
             {
                 echo '<br/>2. DEFINEERITUD FUNKTSIOON :<br/>';
                 //Defineerime global võtmesõna abil, et tahame ka globaalse skoobi
                 //muutujaid antud funktsiooni sees kasutada
                 global $mingiPimekaruTekst;
                 /*Sama nimega muutujat sellisel juhul enam kasutada EI TOHI!:*/
                 //$mingiPimekaruTekst = "LOKAALNE: Üks, kaks, kolm, neli, viis: pimekaru tuleb siis!";
                 echo 'Globaalse skoobi muutuja "$mingiPimekaruTekst" sisu: "' . $mingiPimekaruTekst;
             }
             //Kutsume funktsiooni välja
             ytlePimekaruTekstTeistmoodi();
             
             
             
            /*
             * Kui tahame, et meil oleks aga võimalus funktsiooni sees kasutada ühtaegu
             * SAMA NIMEGA globaalse muutuja ning lokaalse muutuja nime, tuleb
             * kasutada võtmesõna $GLOBALS['globaalseMuutujaNimiIlma_$_märgita'].
             * $GLOBALS[] on tegelikkuses meile juba teadatuntud sildistatud massiiv,
             * milles on siltidega indekseerimise abil salvestatud kõik antud programmi 
             * lõikes globaalselt defineeritud muutujad. Et globaalne muutuja ükskõik 
             * millisest programmi skoobist kätte saada, tulebki viidata 
             * massiivi nimele $GLOBALS ning küsida sildiga viitamise abil tema seest
             * olevat vastavat muutujat  $GLOBALS'[globaalseMuutujaNimiIlma_$_märgita']
             * 
             * Lähemalt saab lugeda järgnevalt lingilt: 
             * http://php.net/manual/en/reserved.variables.globals.php
             *  
             */ 
             
             function ytlePimekaruTekstKolmandatMoodi()
             {
                 echo '<br/>3. DEFINEERITUD FUNKTSIOON :';
                 //Defineerime lokaalse muutuja, mille nimi kattub globaalse muutujaga
                 $mingiPimekaruTekst = "LOKAALNE: Üks, kaks, kolm, neli, viis: pimekaru tuleb siis!";
                 echo '<br/>';
                 //Kasutame $GLOBALS[] massiivi, et saada kätte globaalne muutuja ja selle sisu,
                 //mille nimi on samuti $mingiPimekaruTekst
                 echo 'Globaalse skoobi muutuja "$mingiPimekaruTekst" sisu: "' . $GLOBALS['mingiPimekaruTekst'];
                 
                 echo 'Lokaalse skoobi muutuja "$mingiPimekaruTekst" sisu: ' . $mingiPimekaruTekst;
             }
            //Kutsume funktsiooni välja
            ytlePimekaruTekstKolmandatMoodi();
        ?>
    </body>
</html>
